package cn.rulian.base.common.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** 
 * 数值工具类
 */
public class Num
{
	public static void main(String[] args) {  
        System.out.println(format(1.2365, "0"));  
    } 
	
	private Num(){}
	
	/**
	 * 加法
	 */
	public static double add(double v1, double v2)
	{
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.add(b2).doubleValue();
	}

	/**
	 * 减法
	 */
	public static double sub(double v1, double v2)
	{
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.subtract(b2).doubleValue();
	}

	/**
	 * 乘法
	 */
	public static double mul(double v1, double v2)
	{
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.multiply(b2).doubleValue();
	}

	/**
	 * 除法
	 */
	public static double div(double v1, double v2)
	{
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.divide(b2, 3, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 截取3位
	 */
	public static double round(double v)
	{
		BigDecimal b = new BigDecimal(Double.toString(v));
		BigDecimal one = new BigDecimal("1");
		return b.divide(one, 3, BigDecimal.ROUND_HALF_UP).doubleValue();
	}


	/**
	 * 格式化：2位小数
	 */
	public static String format(double value)
	{
		return new DecimalFormat("0.00").format(value);
	}

	/**
	 * 格式化：指定格式 <br/>
	 * 0	整数 <br/>
	 * 0.0	一位小数
	 */
	public static String format(double value, String pattern)
	{
		return new DecimalFormat(pattern).format(value);
	}
	
	/**
	 * 将整数转换为指定长度的字符串返回，如果长度不够，前面补0</br>常用作生成编号
	 * @param num 要转换的数值
	 * @param len 转换后的长度
	 * @return
	 */
	public static String getIntStr(int num, int len)
	{
		String numStr = num + "";
		int ll = numStr.length();
		StringBuffer buf = new StringBuffer("");
		if (ll < len)
		{
			while (ll++ < len)
			{
				buf.append("0");
			}
		}

		return buf + numStr;
	}


	/**
	 * 检查是否是数字
	 */
	public static boolean isNumber(String value)
	{ 
		String patternStr = "^\\d+$";
		Pattern p = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); // 忽略大小写;
		Matcher m = p.matcher(value);
		return m.find();
	}
}
